package com.ProjetEISD.extraction;

import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.swing.*;

public class UI {

	/**
	 * Create the GUI and show it.  For thread safety,
	 * this method should be invoked from the
	 * event-dispatching thread.
	 */
	private static void createAndShowGUI() {
		//Création de la fenêtre.
		JFrame frame = new JFrame("Système Question-Réponse");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setPreferredSize(Constants.SIZE);
		frame.setMinimumSize(Constants.SIZE);
		frame.setLayout(new BorderLayout());

		ControlPanel controlPanel = new ControlPanel();
//		controlPanel.setPreferredSize(new Dimension(200, 200));
		frame.getContentPane().add(controlPanel, BorderLayout.CENTER);

		//Affichage de la fenêtre.
		frame.pack();
		frame.setVisible(true);
	}
	

	public static void main(String[] args) {
		//job: event-dispatching thread
		//Créer et afficher GUI de l'application.
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();
				System.out.println("current path="+Constants.PATH);
				File f = new File("bd"+File.separator+Constants.OUTFILE);
				if(!f.exists()) {
					Extractor extractor = new Extractor();
					//extractor.processRssFiles(Constants.PATH+Constants.RSS_FOLDER_NAME, ".xml");
					extractor.processRssFiles(Constants.RSS_FOLDER_NAME, ".xml");
					Vector<Match> matches = extractor.getMatches();
					// Ecriture dans un fichier de sortie de format .txt.
//					{
//						equipe1 : Bordeaux
//						equipe2 : Paris
//						vainqueur :
//						score :
//						...
//					}
					BufferedWriter w;
					try {
						w = new BufferedWriter(new FileWriter(f));

						for(int i=0; i<matches.size(); i++) {
							w.write(matches.get(i).toString()); // plus propre de définir "toString()" directement dans Match
							/*w.write(Constants.DEBUT);

							w.write(Constants.EQUIPE1);
							w.write(matches.get(i).getEquipe1()+"\n");

							w.write(Constants.EQUIPE2);
							w.write(matches.get(i).getEquipe2()+"\n");

							w.write(Constants.VAINQUEUR);
							w.write(matches.get(i).getVainqueur()+"\n");

							w.write(Constants.SCORE);
							w.write(matches.get(i).getScoreEquipe1()+":"
									+matches.get(i).getScoreEquipe2()+"\n");
							
							Vector<String> b1 = matches.get(i).getButeursEquipe1();
							w.write(Constants.BUTEURS_EQUIPE1);
							w.write(b1.toString()+"\n");*/
							/*for(int j=0; j<b1.size(); j++) {
								if (j==b1.size()-1)
									w.write(b1.get(j)+"\n");
								else
									w.write(b1.get(j)+",");
							}*/
							
							/*Vector<String> b2 = matches.get(i).getButeursEquipe2();
							w.write(Constants.BUTEURS_EQUIPE2);
							w.write(b2.toString()+"\n");*/
							/*for(int j=0; j<b2.size(); j++) {
								if (j==b2.size()-1)
									w.write(b2.get(j)+"\n");
								else
									w.write(b2.get(j)+",");
							}*/

							/*w.write(Constants.DATE);
							w.write(matches.get(i).getDate()+"\n");

							w.write(Constants.FIN);*/
						}
						w.close();                	
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				else {
					BufferedReader in;
					try {
						in = new BufferedReader(new FileReader(f));

						String line;
						StringTokenizer st;
						Vector<Match> matches = new Vector<Match>();
						
						while ((line = in.readLine()) != null) {
							//traitement
							Match match = null;
							
							if(line.equals(Constants.DEBUT)) {
								match = new Match();
							}
							
							if(match != null) {
								if(line.startsWith(Constants.EQUIPE1)) {
									st = new StringTokenizer(line, ":");
								     if (st.hasMoreTokens()) {
								    	 match.setEquipe1(st.nextToken());
								     }
								}
								
								if(line.startsWith(Constants.EQUIPE2)) {
									st = new StringTokenizer(line, ":");
								     if (st.hasMoreTokens()) {
								    	 match.setEquipe2(st.nextToken());
								     }
								}
								if(line.startsWith(Constants.VAINQUEUR)) {
									st = new StringTokenizer(line, ":");
								     if (st.hasMoreTokens()) {
								    	 match.setVainqueur(st.nextToken());
								     }
								}
								if(line.startsWith(Constants.SCORE)) {
									st = new StringTokenizer(line, ":");
								     if (st.hasMoreTokens()) {
								    	 match.setScoreEquipe1(Integer.parseInt(st.nextToken()));
								     }
								     if (st.hasMoreTokens()) {
								    	 match.setScoreEquipe2(Integer.parseInt(st.nextToken()));
								     }
								}
								if(line.startsWith(Constants.BUTEURS_EQUIPE1)) {
									st = new StringTokenizer(line, ":");
								    if (st.hasMoreTokens()) {
								    	match.getButeursEquipe1().add(st.nextToken());
								    }
								}
								if(line.startsWith(Constants.BUTEURS_EQUIPE2)) {
									st = new StringTokenizer(line, ":");
								    if (st.hasMoreTokens()) {
								    	 match.getButeursEquipe2().add(st.nextToken());
								    }
								}
								if(line.startsWith(Constants.DATE)) {
									st = new StringTokenizer(line, ":");
								    if (st.hasMoreTokens()) {
								    	Date date = null;
										try {
											date = DateFormat.getDateInstance().parse(st.nextToken());
										} catch (ParseException e) {
											// TODO Auto-generated catch block
											e.printStackTrace();
										}
								    	//match.setDate(date);
								    }
								}
								
								if(line.startsWith(Constants.FIN)) {
									matches.add(match);
								}
							}
							else {
								//System.out.println("Il n'y a aucune donnée dans la base !");
							}
						}
						in.close();
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		});
	}
}